/*
 * @Author: hrg
 * @Date: 2024-01-30 09:07:02
 * @LastEditTime: 2024-01-30 14:31:02
 * @FilePath: \study_go\study08_gin\gin_dome_08\mian.go
 * @Description:全局中间件
 */
package main

import (
	"fmt"
	"log"
	"time"

	"github.com/gin-gonic/gin"
)

// 定义中间件函数：
func middleware(c *gin.Context) {
	// 在请求处理之前执行的操作
	log.Println("请求的URL:", c.Request.URL)

	// 调用链中的后续处理程序
	c.Next()

	// 在请求处理之后执行的操作
	log.Println("响应状态", c.Writer.Status())

}

// 定义中间件2
func MiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		t := time.Now()
		fmt.Println("中间件开始执行了")
		// 设置变量到context的key中，可以通过Get()取
		c.Set("request", "中间件")
		status := c.Writer.Status()
		fmt.Println("中间件执行完毕", status)
		t2 := time.Since(t)
		fmt.Println("time:", t2)

	}
}

func test(c *gin.Context) {

	c.JSON(200, gin.H{
		"GHJ": "GHKJ",
	})
}

func main() {
	r := gin.New()

	// 注册 全局 中间件
	r.Use(middleware)

	r.Use(MiddleWare())

	// 注册 特定的路由组上的中间件
	// v := r.Group("/v")

	// v.Use(middleware)

	r.GET("/test", test)

	r.Run(":9090")

}
